package com.mark.java.controller;

import com.mark.java.entity.Response;
import com.mark.java.entity.User;
import com.mark.java.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import java.util.List;


/**
 * Created by mark on 4/24/15.
 */

@Controller
@RequestMapping("/")
public class MainController {


    /**
     * 这里要注意的是Autowire这个annotation，它是为了告诉spring，这个对象没有实例化，
     * 需要注入一个UserService的实例，可是问题是，UserSerivce是一个接口，如果不指定就不知道你想用哪个实现类，
     * Spring会首先看自己的容器里有没有一个叫做userService的对象（刚才创建的UserServiceImpl的对象名字就叫做userServiceImpl），
     * 如果找不到就在配置文件里配置的路径下面寻找UserService的实现类，找到了就把它的对象拿过来.除此之外刚才Service那个annotation还可以指
     * 定一个value：@Service("userService")。
     * 这样一来，对于UserServiceImpl这个类的实例，Spring给它起的名字就不是userServiceImpl了，而是userService，
     * 如果某个接口的实现类有多个，就可以使用这种方法来指定用哪个实现类，个人认为，如果每个接口都只有一个实现类，那么这么做确实很方便，
     * 但如果有多个实现类并且可能会更换的话，就不如配置文件明了了。
     */
    @Autowired
    private UserService userService; //这个annotation，它是为了告诉spring，这个对象没有实例化，需要注入一个UserService的实例

    @RequestMapping("")
    public String home() {
        User us = new User();
        us.setUsername("Hello");
        userService.saveUsers(us);
        return "index";
    }

    /**
     * Spring在这里的作用就是把MainController需要的userService引入进来，
     * 然后访问http://localhost:8080/spring/json会得到以下结果：
     * <p>
     * ["MarK","Ken","Fawofolo"]
     *
     * @return
     */
    @RequestMapping(value = "/json", produces = "application/json;charset=UTF-8")
    @ResponseBody
    public List<User> json() {
        return userService.getAllUsernames();
    }


    /**
     * http://localhost:8080/ssh/login?id=1
     *
     * @param id 1、直接把表单的参数写在Controller相应的方法的形参中，适用于get方式提交，不适用于post方式提交。
     * @return
     */
    @RequestMapping(value = "/login1", produces = "application/json;charset=UTF-8")
    @ResponseBody
    public Response login1(String id) {
        Response s = new Response("true", userService.findUserById(id));
        return s;
    }

    /**
     * 2 通过HttpServletRequest接收，post方式和get方式都可以。
     * <p>
     * http://localhost:8080/ssh/login2?id=1
     *
     * @param request
     * @return
     */

    @RequestMapping(value = "/login2", produces = "application/json;charset=UTF-8")
    @ResponseBody
    public Response login2(HttpServletRequest request) {
        String id = request.getParameter("id");
        Response s = new Response("true", userService.findUserById(id));
        return s;
    }


    /**
     * 3、通过一个bean来接收,post方式和get方式都可以。
     * http://localhost:8080/ssh/login?id=1
     *
     * @param user
     * @return
     */
    @RequestMapping(value = "/login", produces = "application/json;charset=UTF-8")
    @ResponseBody
    public Response login(User user) {
        User us = userService.findUserById(user.getPhone_number());
        Response s;
        if (us == null) {
            s = new Response("false", "没有此电话号码！ 请先注册", "");
        } else {
            s = new Response("true","登录成功！", us);
        }
        return s;
    }

    /**
     * 电话号 phonNumber;
     *
     * @return
     */
    @RequestMapping("/regit")
    @ResponseBody
    public Response regit(User user) {
        if(userService.findUserById(user.getPhone_number())!=null){
            return new Response("false","已经注册过！请直接登录", "");
        }else {
            if( userService.saveUsers(user)>0){
                return new Response("true","注册成功！", "");
            }else {
                return new Response("false","注册失败！", "");
            }
        }
    }
}
